//路由鉴权：鉴权：项目当中路由能不能被访问的权限
import router from '@/router'
import nprogress from 'nprogress';
import setting from './setting';
//引入进度条样式
import "nprogress/nprogress.css";
nprogress.configure({ showSpinner: false });
//引入用户相关小仓库
import useUserStore from './store/modules/user';
import pinia from './store';
let userStore = useUserStore(pinia);

//全局前置守卫
router.beforeEach(async (to, from, next) => {
    document.title = `${setting.title} - ${to.meta.title}`;
    nprogress.start();
    //获取token，判断用户是否登录
    let token = userStore.token;
    //获取用户名字
    let username = userStore.username;
    //登录判断
    if (token) {
        //登录成功，不能访问login，访问首页
        if (to.path == 'login') {
            next({ path: '/' });
        } else {
            //登录成功访问路由，排除登录
            //存在用户信息
            if (username) {
                //放行
                next();
            } else {
                //没有则在守卫发请求获取用户信息后再放行
                try {
                    await userStore.userInfo();
                    //放行
                    next();
                } catch (error) {
                    //token过期：获取不到用户信息
                    //手动修改本地储存token
                    //退出登录->用户相关数据清空
                    userStore.userLogout();
                    next({ path: '/login', query: { redirect: to.path } });
                }
            }
        }
    } else {
        //未登录判断
        if (to.path == '/login') {
            next();
        } else {
            next({ path: '/login', query: { redirect: to.path } });
        }
    }
})
//全局后置守卫
router.afterEach((to, from) => {
    nprogress.done();
})

//第一个问题：任意路由切换实现进度条业务 ----nprogress
//第二个问题：路由鉴权
//全部路由组件 ：登录|404|任意路由|首页|数据大屏|权限管理（三个子路由）|商品管理（4个子路由）

//用户未登录 ：可以访问login 其余都不行
//登陆成功：不可以访问login 其余都可以